import aiomysql

async def add_table(pool: aiomysql.Pool, table_name: str, columns: dict) -> None:
    """
    检查指定表是否存在，如果不存在则自动创建
    
    该函数会先检查指定的表是否存在，如果不存在则自动创建该表。
    适用于需要在程序运行时动态创建表的场景。
    
    Args:
        pool: aiomysql连接池对象，用于获取数据库连接
        table_name: 要检查/创建的表名称
        columns: 表结构定义字典，格式为{"列名": "类型 约束"}
    
    Returns:
        None: 该函数没有返回值
    
    Raises:
        aiomysql.Error: 如果表操作失败会抛出异常
    """
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            # 检查表是否存在
            await cur.execute(f"SHOW TABLES LIKE '{table_name}'")
            result = await cur.fetchone()
            
            # 如果表不存在则创建
            if not result:
                # 构建列定义SQL
                columns_sql = ', '.join([f"{name} {definition}" for name, definition in columns.items()])
                await cur.execute(f"CREATE TABLE IF NOT EXISTS {table_name} ({columns_sql})")


async def get_all_table(pool: aiomysql.Pool) -> list[str]:
    """
    获取当前数据库中的所有表名
    
    该函数会查询并返回当前数据库中的所有表名列表。
    
    Args:
        pool: aiomysql连接池对象
        
    Returns:
        list[str]: 包含所有表名的列表
    
    Raises:
        aiomysql.Error: 如果查询失败会抛出异常
    """
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("SHOW TABLES")
            tables = await cur.fetchall()
            return [table[0] for table in tables]


async def delete_table(pool: aiomysql.Pool, table_name: str) -> None:
    """
    删除指定的表
    
    该函数会执行DROP TABLE语句删除指定的表。
    
    Args:
        pool: aiomysql连接池对象
        table_name: 要删除的表名称
    
    Returns:
        None: 该函数没有返回值
    
    Raises:
        aiomysql.Error: 如果表操作失败会抛出异常
    """
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute(f"DROP TABLE IF EXISTS {table_name}")